package org.basic.algorithm.others;

/**
 * 棋盘坐标移动
 * <p>
 * 棋子只能够向左或向右移动
 * 问：将棋子移动到 m * n 的坐标有多少种路径
 * <p>
 * 考察：二维数组，动态规划，递归
 *
 * @author LiKun
 * @date 2021/10/12 18:39
 */
public class Chessboard {

    public static void main(String[] args) {
        System.out.println(numberOfPath(1, 3));
    }

    /**
     * 计算将棋子移动到坐标 (x,y) 存在多少种路径
     * <p>
     * 注：递归处理；边界条件为x或y轴为0，该情况下值为1
     *
     * @param x x轴坐标
     * @param y y轴坐标
     *
     * @return 路径条数
     */
    public static int numberOfPath(int x, int y) {
        return (x != 0 && y != 0) ? (numberOfPath(x, y - 1) + numberOfPath(x - 1, y)) : 1;
    }

}
